package com.ruijie.acl.service;


import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.util.Assert;

import com.ruijie.acl.Template;
import com.ruijie.acl.Variable;
import com.ruijie.foundation.dao.support.Page;
/**
 * <p>
 * Title: ACL模板变量服务接口实现类

 * </p>
 * <p>
 * Description: 为ACL模板变量模块提供逻辑处理，以及数据库的操作。

 * </p>
 * <p>
 * Copyright: Copyright (c) 2008
 * </p>
 * <p>
 * Company: Ruijie Co., Ltd.
 * </p>
 * <p>
 * Create Time: 
 * </p>
 * <p>
 * Update Time:
 * </p>
 * <p>
 * Updater:
 * </p>
 * <p>
 * Update Comments:
 * </p>
 * 
 * @author ASAI
 */
public class VariableServiceImpl extends AclHibernateEntityExtendDao<Variable> implements
		VariableService {

	public Page pagedQuery(Variable variable,int pageNo,int pageSize){
		Assert.notNull(variable);
		Criteria criteria=createCriteria(Variable.class);
		if(null!=variable.getTemplate()){
			criteria.add(Restrictions.eq("template",variable.getTemplate()));
			
		}
		return pagedQuery(criteria,pageNo,pageSize);
	}

	/**
	 * 根据模板分页查询变量
	 * @param entity　模板
	 * @param pageNo　页数
	 * @param pageSize　每面显示的记录数
	 * @return　变量
	 */
	public Page pageQueryByTemplate(Template template, int pageNo, int pageSize){
		Assert.notNull(template);
		Criteria criteria=createCriteria(Variable.class);
		criteria.add(Restrictions.eq("template", template));
		return this.pagedQuery(criteria, pageNo, pageSize);
	}
	
	/**
	 * 变量名称重复验证
	 *
	 * @param name 名称
	 * @param template　模板
	 * @param id　本身ID号
	 * @return　是否存在重复
	 */
	@Override
	public boolean isExistVariableName(String name,Template template,Long id) {
		Assert.notNull(name);
		Assert.notNull(template);
		Criteria criteria = createCriteria(Variable.class);

		criteria.add(Restrictions.eq("name", name));
		criteria.add(Restrictions.eq("template",template));

		// 如果ID号 != null ,则表示为修改，如果ID号 == null ，则为添加
		if (id != null){
			Criterion idCriterion = Restrictions.not(Restrictions.eq("id", id));
			criteria.add(idCriterion);
		}
		
		int totalCount = (Integer) criteria.setProjection(
				Projections.rowCount()).uniqueResult();

		// 如果都没有被使用,返回False
		if (totalCount == 0) {
			return false;
		} else {
			return true;
		}
	}

	/**
	 * 
	 */
	@Override
	@SuppressWarnings("unchecked")
	public List<Variable> getByTemplate(Template template) {
		Assert.notNull(template);
		Criteria criteria=createCriteria(Variable.class);
		criteria.add(Restrictions.eq("template", template));
		
		return (List<Variable>)criteria.list();
	}
}
